home *** CD-ROM | disk | FTP | other *** search
- {===========================================================================
- Date: 09-22-93 (08:41)
- From: GREG VIGNEAULT
- Subj: APPEND, ASSIGN, & SHARE
- ---------------------------------------------------------------------------
- JS> How could I determine if DOS extension utilities (eg. Append,
- > Assign, and Share) are installed, using Turbo Pascal? }
-
- (* Turbo/Quick/StonyBrook Pascal: Determine if extensions installed *)
- PROGRAM DosExt; { DOSEXT.PAS: Greg Vigneault 93.10.02 }
-
- USES Dos; { Import Intr(), MsDos(), Registers }
-
- TYPE Extension = (Append, Assign, Share); { the PC/MS-DOS extensions }
-
- VAR Reg : Registers; { to access Intel 80x86 CPU registers }
- Status : WORD; { to return system extension status }
- Installed : Extension; { DOS extension (Append|Assign|Share) }
- Okay : BOOLEAN; { success or failure (TRUE|FALSE) }
- Func : BYTE; { the multiplex function number }
-
- (*------------------------------------------------------------------*)
- FUNCTION DosVersion : WORD; { to check DOS version }
- BEGIN
- Reg.AH := $30; { function:get DOS ver }
- MsDos (Reg); { call DOS services }
- DosVersion := Reg.AL * 100 + Reg.AH; { ...version times 100 }
- END {DosVersion};
-
- (*------------------------------------------------------------------*)
- FUNCTION Multiplex (Func : WORD; VAR Status : WORD) : BOOLEAN;
- BEGIN
- Reg.AH := Func; { function number }
- Reg.AL := 0; { subfunction:get status }
- Intr ($2F,Reg); { do multiplex interrupt }
- IF (Reg.Flags AND 1) <> 0 THEN BEGIN { an error condition? }
- Status := Reg.AX; { the DOS error code }
- Multiplex := FALSE; END { and flag the error }
- ELSE BEGIN
- Status := WORD(Reg.AL); { the function status }
- Multiplex := TRUE; { and flag success }
- END;
- END {Multiplex};
-
- (*------------------------------------------------------------------*)
- BEGIN {DosExt}
-
- WriteLn;
- IF DosVersion < 330 THEN BEGIN
- WriteLn ('PC/MS-DOS version is too low, sorry.');
- Halt (1);
- END;
-
- FOR Installed := Append TO Share DO BEGIN
- CASE Installed OF
- Append : BEGIN Write ('APPEND '); Func := $B7; END;
- Assign : BEGIN Write ('ASSIGN '); Func := $02; END;
- Share : BEGIN Write ('SHARE '); Func := $10; END;
- END; {CASE}
- IF NOT Multiplex (Func,Status) THEN
- WriteLn ('status unknown (MS-DOS error #',Status,').')
- ELSE
- CASE Status OF
- 0,1 : BEGIN
- Write ('not installed: ');
- IF Status = 1 THEN Write ('and NOT ');
- WriteLn ('okay to install.');
- END;
- 255 : WriteLn ('is installed.');
- END; {CASE & IF}
- END; {FOR}
-
- END {DosExt}.
- (********************************************************************)